
/**
 * 上传工具类，需先引入jquery、webuploader
 * 使用方式：$(element).upload(options);
 * 
 * @author zsp
 * @date 2017-12-15
 */
;
(function($) {
	$.fn.extend({
		upload: function(options) {
			options = $.extend({}, {
				url: '',
				extensions: 'gif,jpg,jpeg,bmp,png',
            	mimeTypes: 'image/jpeg,image/gif,image/png',
		        fileSize: 50,	//单个文件大小50M
		        formData: {},	//传递的参数
		        swfPath: '/plugins/webUploader/Uploader.swf',
		        successCallback: function(){},
				fileQueuedCallback: function(){}
			}, options || {});

			if (!options.url) {
				console.error("please set url of upload ajax ！");
				return;
			}
			
			 var uploader = WebUploader.create({
				 // 选完文件后，是否自动上传。
			    auto: true,
			    // swf文件路径
			    swf: options.swfPath,
			    // 文件接收服务端。
			    server: options.url,
			    // 选择文件的按钮。可选。
			    // 内部根据当前运行是创建，可能是input元素，也可能是flash.
			    pick: {
			        id: $(this), // id
			       	multiple: false  // false  单选 
			    },
			    formData: options.formData,
			    //限制单个文件大小（字节）
			    fileSingleSizeLimit: options.fileSize * 1024 * 1024,
			    duplicate: true,
			    // 不压缩image, 默认如果是jpeg，文件上传前会压缩一把再上传！
			    resize: false,
			    accept: {
			    	title: 'file',
			        extensions: options.extensions,
			        mimeTypes: options.mimeTypes
			    }
			});	
			
			// 某个文件开始上传前触发，一个文件只会触发一次
			uploader.on( 'uploadStart', function( file ) {
				layer.load('上传中', {
		      	  icon: 16,
		      	  shade: 0.5,
		      	  time: 0
		      	});
		    });
			
			//当文件被加入队列以后触发
			uploader.on( 'fileQueued', function( file ) {
				if(typeof options.fileQueuedCallback == "function") {
					options.fileQueuedCallback(uploader, file);
				}
		    });
			
			// 文件上传成功，给item添加成功class, 用样式标记上传成功。
			uploader.on( 'uploadSuccess', function(file, response) {
				FPX.dialog.close();
				if (response.hasError) {
					FPX.msg.error(response.message);
					return;
				}
				FPX.msg.success("上传成功！", function () {
					if(typeof options.successCallback == "function") {
		 				options.successCallback(response.data);
		 			}
			    });
			});
			
			uploader.on( 'uploadError', function( file, reason ) {
				FPX.dialog.close();
				FPX.msg.error("上传失败，错误原因：" + reason);
			});
			
			uploader.on( 'error', function( error ) {
				if (error == "Q_TYPE_DENIED") {
					FPX.msg.error("上传的文件类型不支持！");
				} else if ( error == "F_EXCEED_SIZE") {
					FPX.msg.error("上传的文件大小不能超过"+ options.fileSize + "M！");
				}
				console.info(error);
			});
			
		}
	});
})(jQuery);

